home *** CD-ROM | disk | FTP | other *** search
- #ifndef C26DEF_H
- #define C26DEF_H
-
- /*
- Common 2600 (.c26) format v1.0 specification
- -------------------------------------
- Alex Hornby, ahornby@zetnet.co.uk
-
-
- Introduction
- ============
-
- Common 2600 file format definitions. For discussion and suggestions for
- improvement, e-mail ahornby@zetnet.co.uk. I would like to see a fully
- comprehensive 2600 file format develop so please copy this structure
- and use it in your emulators.
-
- The format has been developed due to the multitude of different banking
- schemes for 2600 cartridges, along with the need to select an appropriate
- control device for each game. Using the .c26 format you will be able to
- load games without giving loads of command line switches.
-
- Philosophy
- ==========
- To avoid the format splitting into several competing ones, please do
- not alter the format without discussing it first. I'm not trying to be
- bossy, just to keep the common format truly common.
-
- Tags
- ====
- The format is tagged so as to be extensible and allow both forward and
- backward compatibility. It also means that information that is not
- needed or known does not have to be stored. e.g. If the cartridge image
- is not a saved game then I do not need the game state tags.
-
- The format is a system of tags each being a tag type and the length of
- data in that section. If a tag is not recognised then it should
- be ignored. Each tag is a zero terminated string followed by a 32bit
- signed integer describing the length. If the tag is small the the length
- integer can constitute the data item.
-
- Case is NOT important in tag names
-
- Cross Platform Notes
- ====================
- Note that integers are stored in the Intel/DEC Alpha style.
- All strings are zero terminated .
- */
-
- /*
- Defined TAGS
- ============
-
- + Audit tags: All files should include these tags at the start of the file.
-
- VERSION: Gives file format version as an integer. Currently 1
- WRITER: Name of program that wrote file.
-
- + Cartridge Information tags: useful for collectors.
-
- CARTNAME: Name of cartridge.
- CARTMAN: Manufacturer of cartridge.
- CARTAUTHOR: Name of programmer/programming team who wrote cartridge.
- CARTSERIAL: Serial number of the cartridge.
-
- + Cartridge operation tags: necessary for the running of the game.
-
- TVTYPE: integer, 0=NTSC 1=PAL.
- CONTROLLERS: Left controller BYTE then Right controller BYTE.
- BANKING: Bank switching scheme.
- DATA: Cartridge ROM data.
-
- + Game state tags: used for saved games.
-
- CPUREGS: CPU registers.
- GAMEREGS: TIA and PIA registers.
- PIARAM: The 128 bytes of RAM from the PIA.
-
- CARTRAM: Cartridge RAM, if supported by the BANKING type
-
- */
- enum TAGTYPE { VERSION=-1, WRITER=1,
- CARTNAME=2, CARTMAN=3, CARTAUTHOR=4, CARTSERIAL=5,
- TVTYPE=-2, CONTROLLERS=-3, BANKING=-4, DATA=6,
- CPUREGS=7, GAMEREGS=8, PIARAM=9, CARTRAM=10 };
-
- char *tag_desc[]={ "VERSION", "WRITER",
- "CARTNAME", "CARTMAN", "CARTAUTHOR", "CARTSERIAL",
- "TVTYPE", "CONTROLLERS", "BANKING", "DATA",
- "CPUREGS", "GAMEREGS", "PIARAM", "CARTRAM"};
-
-
- /* Tag structure */
-
- struct c26_tag {
- int type;
- int len;
- };
-
-
- #endif
-